/**
 * 项目管理器
 * 负责项目的创建、加载、保存和管理
 * 所有项目数据存储在 projects/ 目录下
 */

class ProjectManager {
    constructor() {
        this.currentProject = null;
        this.projects = [];
        this.apiBaseUrl = '/api';
    }

    /**
     * 初始化项目管理器
     */
    async initialize() {
        try {
            // 从 API 加载项目列表
            await this.loadProjectsFromFile();
            
            // 检查是否有项目
            if (this.projects.length === 0) {
                await this.loadDefaultProject();
                return this.currentProject;
            }
            
            // 检查URL参数中是否指定了项目ID
            const urlParams = new URLSearchParams(window.location.search);
            const specifiedProjectId = urlParams.get('project');
            
            if (specifiedProjectId) {
                // 验证指定的项目是否存在
                const projectExists = this.projects.some(p => p.id === specifiedProjectId);
                if (projectExists) {
                    await this.loadProjectById(specifiedProjectId);
                    
                    // 清除URL参数，避免一直保留在地址栏
                    const currentUrl = new URL(window.location);
                    currentUrl.searchParams.delete('project');
                    window.history.replaceState({}, document.title, currentUrl.toString());
                    return this.currentProject;
                } else {
                    console.warn('⚠️ URL指定的项目不存在，将使用默认项目:', specifiedProjectId);
                }
            }
            
            // 加载默认项目（当没有指定项目或指定项目不存在时）
            const defaultProjectId = this.defaultProjectId;
            if (defaultProjectId) {
                await this.loadProjectById(defaultProjectId);
            } else {
                // 如果没有设置默认项目，使用第一个项目
                await this.loadProjectById(this.projects[0].id);
            }
            return this.currentProject;
            
        } catch (error) {
            console.error('❌ 项目管理器初始化失败:', error);
            // 降级方案：使用localStorage
            return this.initializeFromLocalStorage();
        }
    }

    /**
     * 从 API 加载项目列表索引
     */
    async loadProjectsFromFile() {
        try {
            const response = await fetch(`${this.apiBaseUrl}/projects`);
            
            if (!response.ok) {
                throw new Error(`无法加载项目列表: ${response.status}`);
            }
            
            const result = await response.json();
            if (!result.success) {
                throw new Error(result.error || '加载失败');
            }
            
            const data = result.data;
            this.projects = data.projects || [];
            this.defaultProjectId = data.defaultProject;
            return this.projects;
            
        } catch (error) {
            console.error('❌ 加载项目列表失败:', error);
            // 降级：尝试从localStorage加载
            return this.loadProjectsFromLocalStorage();
        }
    }
    
    /**
     * 从 localStorage 加载项目列表（降级方案）
     * 注意：localStorage 只用于缓存，不作为主要数据源
     */
    loadProjectsFromLocalStorage() {
        console.warn('⚠️ API 不可用，无法加载项目数据');
        this.projects = [];
        this.defaultProjectId = null;
        return this.projects;
    }

    /**
     * 根据ID加载项目配置
     */
    async loadProjectById(projectId) {
        try {
            const projectMeta = this.projects.find(p => p.id === projectId);
            if (!projectMeta) {
                throw new Error(`未找到项目: ${projectId}`);
            }
            // 通过 API 获取完整项目数据
            const response = await fetch(`${this.apiBaseUrl}/projects/${projectId}`);
            
            if (!response.ok) {
                throw new Error(`无法加载项目配置: ${response.status}`);
            }
            
            const result = await response.json();
            if (!result.success) {
                throw new Error(result.error || '加载失败');
            }
            
            // 使用 API 返回的完整数据
            this.currentProject = result.data;
            return this.currentProject;
            
        } catch (error) {
            console.error(`❌ 加载项目失败 (${projectId}):`, error);
            console.warn('⚠️ API 不可用，无法加载项目详情');
            this.currentProject = null;
            throw error;
        }
    }

    /**
     * 加载默认项目
     */
    async loadDefaultProject() {
        try {
            // 尝试从索引获取默认项目
            let defaultId = this.defaultProjectId || 'default-project';
            
            // 如果列表为空，通过 API 尝试加载默认项目
            if (this.projects.length === 0) {
                try {
                    const response = await fetch(`${this.apiBaseUrl}/projects/default-project`);
                    if (response.ok) {
                        const result = await response.json();
                        if (result.success) {
                            this.currentProject = result.data;
                            this.projects = [this.currentProject];
                            return this.currentProject;
                        }
                    }
                } catch (apiError) {
                    console.warn('⚠️ API 加载失败，尝试降级方案:', apiError);
                }
            } else {
                // 从列表中加载
                return await this.loadProjectById(defaultId);
            }
            
        } catch (error) {
            console.error('❌ 加载默认项目失败:', error);
            throw error;
        }
    }
    

    /**
     * 降级方案：API不可用时的处理
     */
    async initializeFromLocalStorage() {
        console.error('❌ API 服务不可用，无法初始化项目管理器');
        this.projects = [];
        this.currentProject = null;
        
        return null;
    }


    /**
     * 刷新项目列表（重新从文件加载）
     */
    async refreshProjects() {
        try {
            await this.loadProjectsFromFile();
            return this.projects;
        } catch (error) {
            console.error('❌ 刷新项目列表失败:', error);
            throw error;
        }
    }

    /**
     * 获取当前项目
     */
    getCurrentProject() {
        return this.currentProject;
    }

    /**
     * 获取当前项目的默认场景ID
     */
    getDefaultSceneId() {
        return this.currentProject?.defaultScene || null;
    }

    /**
     * 获取当前项目的所有场景
     */
    getScenes() {
        return this.currentProject?.scenes || [];
    }

    /**
     * 根据ID获取场景配置
     */
    getSceneById(sceneId) {
        return this.currentProject?.scenes.find(s => s.id === sceneId) || null;
    }

    /**
     * 生成唯一ID
     */
    generateId(prefix = 'item') {
        const timestamp = Date.now();
        const random = Math.random().toString(36).substring(2, 9);
        return `${prefix}-${timestamp}-${random}`;
    }

    /**
     * 获取所有项目
     */
    getAllProjects() {
        return this.projects;
    }
}

// 创建单例实例
const projectManager = new ProjectManager();

export default projectManager;

